package org.stvd.common.freemarker.method;

import java.util.List;

import javax.servlet.http.HttpServletResponse;

import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;

/**
 * Freemarker自定义方法 实现response.encodeURL(url)功能 使用方法 后台：dataMap.put("encodeURL",
 * new EncodeURLMethod(context.getResponse()));
 * 前台：${encodeURL("/news/showNews.do?id=123456")}
 */
@SuppressWarnings("deprecation")
public class EncodeURLMethod implements TemplateMethodModel {

    private HttpServletResponse response;

    /**
     * 带参数的构造函数
     * 
     * @param response
     *            HttpServletResponse对象
     */
    public EncodeURLMethod(HttpServletResponse response) {
        this.response = response;
    }

    /**
     * 执行方法
     * 
     * @param argList
     *            方法参数列表
     * @return Object 方法返回值
     * @throws TemplateModelException
     */

    @SuppressWarnings("rawtypes")
    public Object exec(List argList) throws TemplateModelException {
        if (argList.size() != 1) // 限定方法中必须且只能传递一个参数
        {
            throw new TemplateModelException("Wrong arguments!");
        }
        // 返回response.encodeURL执行结果
        // String msg = response.encodeURL((String)argList.get(0));
        // System.out.println(msg);
        return response.encodeURL((String) argList.get(0));
    }
}